export default {
	namespaced: true,
	// 公共变量 只能通过mutations来修改
	// 基本使用方式：
	// （...mapState(['loginState', 'userInfo'])）；
	// （...mapActions(['userLoginAction'])）
	/**
	 * 基本使用方式：
	 * 1:
	 * 获取 => this.$store.state.loginState
	 * 提交设置 => this.$store.commit("userLoginAction")
	 * 2:
	 * 引用全局定义属性和方法，属性声明用...mapState,方法声明用...mapActions，可直接用this方式调用
	 * a：import { mapState, mapActions } from 'vuex'
	 * b: 在methods中...mapActions(['openModal']), 直接使用this.openModal，
	 * methods外使用computed: {...mapState(['loginState'])}, 直接使用this.loginState
	 */
	// 登录逻辑中可以通过uni.$emit('myUserLogin')设置事件监听，在个人页面通过uni.$on('muUserLogin', () => {})来获取授权登录后的数据，实时监听变化
	state: {
		// 控制全局教务系统数据同步，每个人只能存在一个同步链接，默认允许同步
		isJwgl: true,
		// 控制全局弹窗是否显示
		modalShow: false,
		// 授权用户信息
		loginState: false, // 登录状态，默认未登录
		token: uni.getStorageSync('token') || null,
		sessionKey: uni.getStorageSync('sessionKey') || null,
		openId: uni.getStorageSync('openId') || null,
		userInfo: uni.getStorageSync('userInfo') && JSON.parse(uni.getStorageSync('userInfo')) || {
			avatarUrl: ''
		}
	},
	// 这个实时监听 state 的数据对象的变化，类似于组件中的computed属性，会依赖state的变化而变化
	getters: {
	
	},
	// 用来同步state的值
	mutations: {
		// 用户登录设置
		setUserInfo(state, userInfo) {
			state.loginState = true
			state.userInfo = Object.assign(state.userInfo, userInfo)
			uni.setStorageSync('userInfo', JSON.stringify( Object.assign(state.userInfo, userInfo)))
			
		},
		// token设置
		setToken(state, token) {
			state.token = token
			uni.setStorageSync('token', token)
		},
		// 登录后系统验证授权
		setOpenId(state, openId) {
			state.openId = openId
			uni.setStorageSync('openId', openId)
		},
		setSessionKey(state, sessionKey) {
			state.sessionKey = sessionKey
			uni.setStorageSync('sessionKey',  sessionKey)
		},
		// 弹窗显示设置
		openModal(state) {
			state.modalShow = true
		},
		// 弹窗关闭
		closeModal(state) {
			state.modalShow = false
		},
		// 开始链接 -- 不允许链接
		openIsJwgl(state) {
			state.isJwgl = false
		},
		// 链接关闭 -- 允许链接
		closeIsJwgl(state) {
			state.isJwgl = true
		}
	},
	// 通过提交mutations内部的方法，异步更新 state 的状态(官方推荐)
	actions: {
		// 相当于异步的操作,不能直接改变state的值，只能通过触发mutations的方法才能改变
		// 提交用户授权登录
		setUserInfoAction(context, userInfo) {
			context.commit('setUserInfo', userInfo)
		},
		// 提交token设置
		setTokenAction(context, token) {
			context.commit('setToken', token)
		},
		// 提交openId设置
		setOpenIdAction(context, openId) {
			context.commit('setOpenId', openId)
		},
		// 提交sessionKey设置
		setSessionKeyAction(context, sessionKey) {
			context.commit('setSessionKey', sessionKey)
		},
		// 提交打开弹窗
		openModalAction(context) {
			context.commit('openModal')
		},
		// 提交关闭弹窗
		closeModalAction(context) {
			context.commit('closeModal')
		},
		// 提交开始链接
		openIsJwglAction(context) {
			context.commit('openIsJwgl')
		},
		// 提交关闭链接
		closeIsJwglAction(context) {
			context.commit('closeIsJwgl')
		}
	}
}